package com.android.uu.utils;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.content.Context;
import android.text.TextUtils;
import android.view.inputmethod.InputMethodManager;

public class uuUtils {
	
	private static double EARTH_RADIUS = 6378.137;// 地球半径
	
	/**
	 * 根据手机分辨率从dp转成px
	 * 
	 * @param context
	 * @param dpValue
	 * @return
	 */
	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}
  
    /** 
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
     */  
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);  
    }  

	/**功能描述：[是否早于当前时间]
	 * 程序作者：WZL  
	 * 编写时间：[2015年4月9日]-[下午3:44:49]
	 * @param endtime
	 * @return  true 早 false 晚
	 */
	public static boolean isBefore(String endtime){
		Date nowDate = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
				Locale.getDefault());
		try {
			Date endDate = sdf.parse(endtime);
			return nowDate.before(endDate);
		} catch (ParseException e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**判断指定的时间，是否在开始时间和结束时间之间
	 * @param start 开始时间
	 * @param end 结束时间
	 * @param date 要判断的时间
	 * @return 
	 */
	public static boolean checkDate(String start, String end, String date) {
		//先和开始时间比较
		int result = checkDateBeforAndAfter(start, date);
		if (result == 0 || result == 1) {
			result = checkDateBeforAndAfter(date, end);
			if (result == 0 || result == 1) {
				return true;
			}else {
				return false;
			}
		}else {
			return false;
		}
	}
	
	/**判断两个日期的前后
	 * @param date1
	 * @param date2
	 * @return 0相等；1：date1小于c2；2：c1大于c2
	 */
	public static int checkDateBeforAndAfter(String date1, String date2) {
		DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
		Calendar c1 = java.util.Calendar.getInstance();
		Calendar c2 = java.util.Calendar.getInstance();
		try {
			c1.setTime(df.parse(date1));
			c2.setTime(df.parse(date2));
		} catch (java.text.ParseException e) {
			System.err.println("格式不正确");
		}
		int result = c1.compareTo(c2);
		if (result == 0) {
//			System.out.println("c1相等c2");
			return 0;
		}else if (result < 0) {
//			System.out.println("c1小于c2");
			return 1;
		}else {
//			System.out.println("c1大于c2");
			return 2;
		}
	}
	
	/**判断指定的时间，是否在开始时间和结束时间之间
	 * @param start 开始时间
	 * @param end 结束时间
	 * @param date 要判断的时间
	 * @return 
	 */
	public static boolean checkTime(String start, String end, String time) {
		//先和开始时间比较
		int result = checkTimeBeforAndAfter(start, time);
		if (result == 0 || result == 1) {
			result = checkTimeBeforAndAfter(time, end);
			if (result == 0 || result == 1) {
				return true;
			}else {
				return false;
			}
		}else {
			return false;
		}
	}
	
	/**判断两个时间的前后
	 * @param date1
	 * @param date2
	 * @return 0相等；1：date1小于c2；2：c1大于c2
	 */
	public static int checkTimeBeforAndAfter(String time1, String time2) {
		DateFormat df = new java.text.SimpleDateFormat("HH:mm:ss");
		Calendar c1 = java.util.Calendar.getInstance();
		Calendar c2 = java.util.Calendar.getInstance();
		try {
			c1.setTime(df.parse(time1));
			c2.setTime(df.parse(time2));
		} catch (java.text.ParseException e) {
			System.err.println("格式不正确");
		}
		int result = c1.compareTo(c2);
		if (result == 0) {
//			System.out.println("c1相等c2");
			return 0;
		}else if (result < 0) {
//			System.out.println("c1小于c2");
			return 1;
		}else {
//			System.out.println("c1大于c2");
			return 2;
		}
	}
	
	/**显示或者隐藏输入法
	 * @param context
	 */
	public static void showOrHideInputMenthod(Context context) {
		// 隐藏输入法
		InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);// 显示或者隐藏输入法
	}
	
	/**
	 * 计算两个经纬度之间的距离
	 * 
	 * @param lat1
	 * @param lng1
	 * @param lat2
	 * @param lng2
	 * @return 距离，单位是km
	 */
	public static String GetDistance(double lat1, double lng1, double lat2,
			double lng2) {
		double radLat1 = rad(lat1);
		double radLat2 = rad(lat2);
		double a = radLat1 - radLat2;
		double b = rad(lng1) - rad(lng2);

		double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
				+ Math.cos(radLat1) * Math.cos(radLat2)
				* Math.pow(Math.sin(b / 2), 2)));
		s = s * EARTH_RADIUS;
		s = Math.round(s * 10000) / 10000;
			
		return formatDouble(s)+"km";
	}
	private static double rad(double d) {
		return d * Math.PI / 180.0;
	}
	
	/**将数字转为小数点后两位小数
	 * @param num
	 * @return
	 */
	public static String formatDouble(double num) {
		DecimalFormat format = new DecimalFormat("##0.00");
		return format.format(num);
	}
	
	/**获取String类型数据的小数点后两位
	 * @param num
	 * @return
	 */
	public static String formatAfterDot2(String num) {
		if (TextUtils.isEmpty(num)) {
			return "0.00";
		}
		DecimalFormat format = new DecimalFormat("#0.00");
		return format.format(new BigDecimal(num));
	}
}
